package com.baseframe.topic.controller;

import com.baseframe.mybatis.utils.BaseMetaObjectUtil;
import com.baseframe.tool.result.R;
import com.baseframe.topic.entity.SnsTestTopicItemOption;
import com.baseframe.topic.entity.request.SnsTestTopicItemOptionRequest;
import com.baseframe.topic.service.SnsTestTopicItemOptionService;
import lombok.AllArgsConstructor;
import org.springframework.beans.BeanUtils;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * 后台管理控制器类，处理SNS测试话题选项相关的请求。
 */
@RestController
@RequestMapping("/back/test-topic-item-option")
@AllArgsConstructor
public class BackSnsTestTopicItemOptionController {

    private SnsTestTopicItemOptionService snsTestTopicItemOptionService;

    /**
     * 保存或更新题目选项
     *
     * @param request 题目选项的请求对象
     * @return R对象，包含保存或更新操作结果信息
     */
    @PostMapping("/save-or-update")
    public R<Object> saveOrUpdate(@RequestBody SnsTestTopicItemOptionRequest request) {
        // 创建一个SnsTestTopicItemOption对象
        SnsTestTopicItemOption snsTestTopicItemOption = new SnsTestTopicItemOption();
        // 将请求对象中的属性拷贝到SnsTestTopicItemOption对象中，并根据规定的更新填充属性进行处理
        BeanUtils.copyProperties(request, snsTestTopicItemOption, BaseMetaObjectUtil.getUpdateFillPropertiesName(SnsTestTopicItemOption.class));
        // 调用服务层进行保存或更新题目选项操作，并返回相应结果
        return snsTestTopicItemOptionService.saveOrUpdate(snsTestTopicItemOption) ? R.data(snsTestTopicItemOption) : R.fail();
    }

    /**
     * 删除题目选项
     *
     * @param request 删除题目选项的请求对象
     * @return R对象，包含删除操作结果信息
     */
    @PostMapping("/delete")
    public R<Object> delete(@RequestBody SnsTestTopicItemOptionRequest request) {
        // 检查必要的请求参数是否存在
        if (request.getId() == null) {
            return R.fail("缺少必要请求参数");
        }
        // 调用服务层进行删除题目选项操作，并返回删除结果
        return snsTestTopicItemOptionService.removeById(request.getId()) ? R.success() : R.fail();
    }
}

